[Capstone]ダイナミックテーブルの実装
4061 ワード
📖2022.04.13
1.サークル作成ページにサークルを登録する
2.コミュニティページを作成した後、対応するコミュニティのテーブルを動的に生成します。
1-1サークル登録
public class CircleController {
@Autowired
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
private CircleDAO circleDAO;
@Autowired
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
private FindDAO findDAO;
@GetMapping("circle/register/CoCircle")
public int insertCircle(@RequestBody InputCircleDTO inputCircleDTO
)throws Exception{
FindDTO findDTO = new FindDTO();
findDTO.setCollege(inputCircleDTO.getCollege());
findDTO.setInterest(inputCircleDTO.getInterest());
findDTO.setRegion(inputCircleDTO.getRegion());
int a = findDAO.findCollegecode(findDTO);
int b = findDAO.findInterestcode(findDTO);
final CoCircleDTO param = new CoCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
circleDAO.createTable(inputCircleDTO.getUrl());
return circleDAO.insertCoCircle(param);
}
@GetMapping("circle/register/UniCircle")
public int insertUniCircle(@RequestBody InputCircleDTO inputCircleDTO) throws Exception{
FindDTO findDTO = new FindDTO();
findDTO.setInterest(inputCircleDTO.getInterest());
findDTO.setRegion(inputCircleDTO.getRegion());
int a = findDAO.findInterestcode(findDTO);
int b = findDAO.findRegioncode(findDTO);
final UniCircleDTO param = new UniCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
return circleDAO.insertUniCircle(param);
}
-->CoCircleとUniCircleの違いは校内サークルか対外連合サークルかです.そのため、料金はほぼ同じですが、環状線は学校、UniCircleは地域を受け入れています
-->InputCircleDTOを作成する新しい理由は、CoCirleDTOの学校値、UniCircleDTOの地域値がint型であるため、InputCircleDTOはまずStringを受信し、メソッド内でint型に変換します.
△正直、これは有効な方法ではないと思いますが、他の方法はまだ分かりません.
2-1サークルが作成したURLから#{url}tbという新しいテーブルを作成
public class CircleController {
@Autowired
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
private CircleDAO circleDAO;
@Autowired
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
private FindDAO findDAO;
@GetMapping("circle/register/CoCircle")
public int insertCircle(@RequestBody InputCircleDTO inputCircleDTO
)throws Exception{
FindDTO findDTO = new FindDTO();
findDTO.setCollege(inputCircleDTO.getCollege());
findDTO.setInterest(inputCircleDTO.getInterest());
findDTO.setRegion(inputCircleDTO.getRegion());
int a = findDAO.findCollegecode(findDTO);
int b = findDAO.findInterestcode(findDTO);
final CoCircleDTO param = new CoCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
circleDAO.createTable(inputCircleDTO.getUrl());
return circleDAO.insertCoCircle(param);
}
@GetMapping("circle/register/UniCircle")
public int insertUniCircle(@RequestBody InputCircleDTO inputCircleDTO) throws Exception{
FindDTO findDTO = new FindDTO();
findDTO.setInterest(inputCircleDTO.getInterest());
findDTO.setRegion(inputCircleDTO.getRegion());
int a = findDAO.findInterestcode(findDTO);
int b = findDAO.findRegioncode(findDTO);
final UniCircleDTO param = new UniCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
return circleDAO.insertUniCircle(param);
}
<update id="createTable" parameterType="String" >
CREATE table if not exists ${url}(
`index` int NOT NULL ,
`user_id` varchar(45) NULL,
`manage_num` varchar (45) NULL,
`user_nickname` varchar (45) NULL,
`deleted` varchar(1) NULL,
PRIMARY KEY (`index`))
</update>
最初は#{}の値で受け取り、構文エラーが発生しました.#{ }
値に「」を自動的にアタッチ
PreparedStatementによる悪意のあるクエリー注入の回避
ガラス
主にユーザー入力の転送に使用
$ { }
「」は自動的に貼り付けられません
パラメータはStatement方式で出力して転送する
意図的なクエリーの注入を阻止できません
SQL注入セキュリティのリスクがある可能性があります
主にtable name column名を渡すために使用されます
#{}、${}差異
現在のエラーは解決されましたが、SQL注入のセキュリティ上の危険性があります.
SQL Injectionとは?
Reference
この問題について([Capstone]ダイナミックテーブルの実装), 我々は、より多くの情報をここで見つけました https://velog.io/@lciminsu/Capstone동적-table구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol